db2数据库

您所在的位置:网站首页 DB2 -204 db2数据库

db2数据库

2024-07-16 15:46| 来源: 网络整理| 查看: 265

 问题如下:

当多个表关联查询的时,两个表都有相同字段时,如果要获取该字段,必须表明该字段来自哪张表,否则报错,列模糊。

如Student表(学生表)和Teacher表(老师表),表中都有id这个字段,为主键,自增。当两个表关联获取一个老师下的学生(学生表中t_id为老师表中的id)时候。查询代码如下  

SELECT ID FROM STUDENT a INNER JOIN TEACHER b ON a.t_id = b.id

因为学生表和老师表中都有id字段。然而sql文中并没有标注查询的ID来自哪个表,所以报错

 

解决方案:

标注来源表即可

SELECT b.ID,b.name,a.id,a.name FROM STUDENT a INNER JOIN TEACHER b ON a.t_id = b.id 补充:

一般两个表关联这种问题不会犯,当多个表和某个表中还有子查询的时候,往往会犯这种较为低级的错误。

SELECT b.*,a.id,a.name FROM STUDENT a INNER JOIN TEACHER b ON a.t_id = b.id

 上面的sql文没有错误,查询出教师和学生的id,如果在该sql文上再次嵌套一层的话,那么很容易犯错

 我们假设在上面sql文的基础上再和学校资源表进行(sch_scourse )关联,获取该学校中老师所拥有的学校资源有哪些,(其实这里不需要教师表和学生表关联,多此一举,为了复现错误,理解一下。)

select a.id,a.name,b.name from ( SELECT b.*,a.id,a.name FROM STUDENT a INNER JOIN TEACHER b ON a.t_id = b.id ) a INNER JOIN sch_scourse b on a.id = b.own_id

 当我们再次执行上面的sql文时,就会报错SQLCODE=-203,还是同样的错误,乍一看没有问题,最外层只有别名为a,b的表,没有问题,再执行子查询中的sql文(第一个from中的查询,可以正常返回结果,没有问题,那么问题出在哪里呢)

原因在这里:子查询中教师表有id字段(虽然查询的是b.*,学生表有id字段),当最外层查询使用a.id进行查询的时候,数据库不知道你是想查询b.*还是a.*了,所以报错 解决:在子查询中对其中一个id 赋一个别名即可

解决后sql如下:

select a.id,a.name,b.name from ( SELECT b.*,a.id as student_id,a.name FROM STUDENT a INNER JOIN TEACHER b ON a.t_id = b.id ) a INNER JOIN sch_scourse b on a.id = b.own_id

问题解决。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3